{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "CNN_MNIST",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/sanglee/BIML2019/blob/master/CNN_MNIST.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "metadata": {
        "id": "iq4PO1UcclmD",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 106
        },
        "outputId": "7e480f02-5488-4c3b-fe3e-39404ac2920b"
      },
      "cell_type": "code",
      "source": [
        "'''\n",
        "CNN to classify MNIST handwritten digits\n",
        "'''\n",
        "\n",
        "import tensorflow as tf\n",
        "import keras\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "# Read in MNIST data\n",
        "from tensorflow.examples.tutorials.mnist import input_data\n",
        "mnist = input_data.read_data_sets(\"./data/mnist\", one_hot=True)\n",
        "\n",
        "# Parameters\n",
        "learning_rate = 0.001\n",
        "training_iters = 20000\n",
        "batch_size = 128\n",
        "display_step = 10\n",
        "\n",
        "# Network Parameters\n",
        "n_input = 784 # input image shape = 28*28 grey scale\n",
        "n_classes = 10 # 10 classes (0-9 digits)\n",
        "dropout = 0.25 # probability to remove units during dropout"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Using TensorFlow backend.\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "Extracting ../data/mnist/train-images-idx3-ubyte.gz\n",
            "Extracting ../data/mnist/train-labels-idx1-ubyte.gz\n",
            "Extracting ../data/mnist/t10k-images-idx3-ubyte.gz\n",
            "Extracting ../data/mnist/t10k-labels-idx1-ubyte.gz\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "PRPapEFmdXD8",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# tf Graph input\n",
        "x = tf.placeholder(tf.float32, [None, n_input])\n",
        "y = tf.placeholder(tf.float32, [None, n_classes])\n",
        "keep_prob = tf.placeholder(tf.float32) # dropout (keep probability)\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "7UTKO4fMdbsT",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def reshape(x, xdim, ydim):\n",
        "    return tf.reshape(x, shape=[-1, xdim, ydim, 1])\n",
        "\n",
        "def conv2d(x, filters, size, stride=1):\n",
        "    out = tf.layers.conv2d(x, filters=filters, kernel_size=[size,size], strides=[stride, stride], padding='same',\n",
        "                         activation='relu', \n",
        "                         kernel_initializer=tf.contrib.layers.xavier_initializer(),\n",
        "                         bias_initializer=tf.zeros_initializer())\n",
        "    return out\n",
        "\n",
        "def maxpool2d(x, size=2, stride=2):\n",
        "    # MaxPool2D wrapper\n",
        "    return tf.layers.max_pooling2d(x, pool_size=[size, size], strides=[stride, stride], padding='same')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "udBoZhBzdeBY",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Create model\n",
        "def conv_net(x, weights, biases, dropout):\n",
        "    # Reshape input picture\n",
        "    x = reshape(x, 28, 28)\n",
        "\n",
        "    # Convolution Layer\n",
        "    conv1 = conv2d(x, 32, 5)\n",
        "    print(\"Conv 1 = \", conv1)\n",
        "    # Max Pooling (down-sampling)\n",
        "    conv1 = maxpool2d(conv1, size=2, stride=2)\n",
        "    print(\"Conv 1 = \", conv1)\n",
        "\n",
        "    # Fully connected layer\n",
        "    fc1 = tf.layers.dense(tf.layers.flatten(conv1), units=1024, activation='relu',\n",
        "                                         kernel_initializer=tf.contrib.layers.xavier_initializer(),\n",
        "                                         bias_initializer=tf.zeros_initializer())\n",
        "    # Apply Dropout\n",
        "    fc1 = tf.layers.dropout(fc1, rate=dropout)\n",
        "\n",
        "    # Output, class prediction\n",
        "    out = tf.layers.dense(fc1, units=10, activation=None,\n",
        "                                         kernel_initializer=tf.contrib.layers.xavier_initializer(),\n",
        "                                         bias_initializer=tf.zeros_initializer())\n",
        "                          \n",
        "    return out"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "AbFNQrjSdjpb",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 233
        },
        "outputId": "b8fb7037-4370-4477-e1be-7440d370fca4"
      },
      "cell_type": "code",
      "source": [
        "# Construct model\n",
        "pred = conv_net(x, weights, biases, keep_prob)\n",
        "\n",
        "# Define loss and optimizer\n",
        "loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))\n",
        "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)\n",
        "\n",
        "# Evaluate model\n",
        "correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))\n",
        "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
      ],
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Conv 1 =  Tensor(\"conv2d_6/Relu:0\", shape=(?, 28, 28, 32), dtype=float32)\n",
            "Conv 1 =  Tensor(\"max_pooling2d_5/MaxPool:0\", shape=(?, 14, 14, 32), dtype=float32)\n",
            "WARNING:tensorflow:From <ipython-input-37-80c3f6427c2d>:13: flatten (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Use keras.layers.flatten instead.\n",
            "WARNING:tensorflow:From <ipython-input-37-80c3f6427c2d>:15: dense (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Use keras.layers.dense instead.\n",
            "WARNING:tensorflow:From <ipython-input-37-80c3f6427c2d>:17: dropout (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Use keras.layers.dropout instead.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "YMYOpkQBdkOc",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 835
        },
        "outputId": "41c13180-2822-4516-aa99-e08e889bb599"
      },
      "cell_type": "code",
      "source": [
        "# Launch the graph\n",
        "with tf.Session() as sess:\n",
        "    sess.run(tf.global_variables_initializer())\n",
        "    step = 1\n",
        "    # Keep training until reach max iterations\n",
        "    while step * batch_size < training_iters:\n",
        "        batch_x, batch_y = mnist.train.next_batch(batch_size)\n",
        "        # Run optimization op (backprop)\n",
        "        sess.run(optimizer, feed_dict={x: batch_x, y: batch_y, keep_prob: dropout})\n",
        "\n",
        "        if step % display_step == 0:\n",
        "            # Calculate batch loss and accuracy\n",
        "            l, acc = sess.run([loss, accuracy], feed_dict={x: batch_x,\n",
        "                                                              y: batch_y,\n",
        "                                                              keep_prob: 1.})\n",
        "            print(\"Iter \" + str(step*batch_size) + \", Minibatch Loss= \" + \\\n",
        "                  \"{:.6f}\".format(l) + \", Training Accuracy= \" + \\\n",
        "                  \"{:.5f}\".format(acc))\n",
        "        step += 1\n",
        "    print(\"Optimization Finished!\")\n",
        "\n",
        "    # Calculate accuracy for 256 mnist test images\n",
        "    \n",
        "    print(\"Testing Accuracy:\", \\\n",
        "        sess.run(accuracy, feed_dict={x: mnist.test.images[:256],\n",
        "                                      y: mnist.test.labels[:256], keep_prob: 1.}))\n",
        "\n",
        "    filters = sess.run(weights['wc1'])\n",
        "    f, a = plt.subplots(4, 8, figsize=(10, 10))\n",
        "    for i in range(32):\n",
        "        a[int(i/8)][i%8].imshow(np.reshape(filters[:,:,:,i], (5, 5)), cmap=\"gray\")\n",
        "    f.show()\n"
      ],
      "execution_count": 39,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Iter 1280, Minibatch Loss= 0.667637, Training Accuracy= 0.78125\n",
            "Iter 2560, Minibatch Loss= 0.278191, Training Accuracy= 0.93750\n",
            "Iter 3840, Minibatch Loss= 0.358409, Training Accuracy= 0.87500\n",
            "Iter 5120, Minibatch Loss= 0.237538, Training Accuracy= 0.91406\n",
            "Iter 6400, Minibatch Loss= 0.214712, Training Accuracy= 0.92188\n",
            "Iter 7680, Minibatch Loss= 0.178349, Training Accuracy= 0.93750\n",
            "Iter 8960, Minibatch Loss= 0.150882, Training Accuracy= 0.92969\n",
            "Iter 10240, Minibatch Loss= 0.155136, Training Accuracy= 0.96875\n",
            "Iter 11520, Minibatch Loss= 0.125937, Training Accuracy= 0.96094\n",
            "Iter 12800, Minibatch Loss= 0.141990, Training Accuracy= 0.96875\n",
            "Iter 14080, Minibatch Loss= 0.145106, Training Accuracy= 0.92969\n",
            "Iter 15360, Minibatch Loss= 0.158082, Training Accuracy= 0.96875\n",
            "Iter 16640, Minibatch Loss= 0.079253, Training Accuracy= 0.97656\n",
            "Iter 17920, Minibatch Loss= 0.057774, Training Accuracy= 0.98438\n",
            "Iter 19200, Minibatch Loss= 0.026165, Training Accuracy= 1.00000\n",
            "Optimization Finished!\n",
            "Testing Accuracy: 0.9921875\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlEAAAIECAYAAAA5P3uaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XtAFWX+P/D34QAHkDuC4P2C4iWt\nMDSXxGzFzG+llglqZZulW2bZWrv7c21106zM3Mpd09zuW0aZ1lZe0tIyRSNL8y6KCojKVe6c6/z+\nICYOZw7MM9yb9+ufPM/n6ZnHj3PmfM7MnGcMkiRJICIiIiIhHq09ASIiIqL2iEUUERERkQYsooiI\niIg0YBFFREREpAGLKCIiIiINWEQRERERaeDZ0hs8dOiQYnu/fv1w6tQpl/YtW7YIjZ+QkCDU//rr\nr4fNZlPd/7nnnhMa/+9//7vqvn/6058U25988km88MILLu0i8waAxYsXC/U3GAzYtGmT6v4PPPCA\n0PgOh0Oo/2233abY/q9//QuPPPKIS/vVV18tNP6+fftU9123bh0yMjKExvf19RXq/7vf/U5138jI\nSMX2Xbt24cYbb3Rpv3TpktBcgoODhfqnp6dj3bp1qvufPXtWaHyRse+//37F9qefflrx/VleXi40\nlxkzZgj1v+aaa7BkyRLV/ePj44XGv/vuu1X3ffLJJxXb58+fjxdffNGlvaSkRGgua9euFep/8eJF\noWNsVFSU0Ph//etfhfo/9dRTiu2PPPII/vWvf7m0p6WlCY0fHh6uuu+zzz6Lw4cPC40v6pZbblHd\nd+vWrYrt8fHx2LNnj0v73/72N6G5/OEPf1Ddd+rUqdiwYYPQ+EePHhXq/8orryi2t5kzUaIfME3F\nw6PNpMAt0QNFUwkJCWmV7Yrq0aNHi2+zV69eLb5NLfr3798q2xX5cGgtXbt2bZXtdu7cuVW2K8Jd\nUd7cWutYJ6pTp04tvs3W2l9FBQQEtPg2w8LCWnybNVSdiVq2bBkOHToEg8GABQsWYMiQIXJs7969\nWLlyJYxGIxISEjBnzpxmm2xbdODAAeTn5wMArrvuOqd/zIsXL2Ly5Mm6zU3Hjh3h4+MDAMjLy4PZ\nbJZjvr6+us7N+vXrcebMGQDAtGnT0Lt3bzl29OhRfPzxxwgKCtJlbgDgzJkzKCkpgcFgQJ8+fZwO\n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\n/Do0NBR5eXkAgLy8PISGhirGGsNoNMLPzw8AsGHDBiQkJLgkfdGiRZg6dSpWrFgBqZWehNMauQHa\nR36YG/eYG/eYm/oxP+4xN+4xN79qlXuiamvJHWDHjh3YsGED3njjDaf2Rx99FCNHjkRQUBDmzJmD\nbdu2Ydy4cS02L3da+s3RnvLD3LjH3LjH3NSP+XGPuXFPz7lp8TNRERERyM/Pl1/n5uYiPDxcMXb5\n8mVEREQ0yXZ3796NNWvWYN26dQgICHCKTZw4EWFhYfD09ERCQgJOnTrVJNsU1Vq5Adp+fpgb95gb\n95ib+jE/7jE37jE3v2rxIio+Ph7btm0DABw9ehQRERHw9/cHAHTt2hVlZWXIzs6GzWbDzp07ER8f\n3+htlpaWYvny5Vi7di2Cg4NdYjNnzoTFYgEApKWloW/fvo3ephatkRugfeSHuXGPuXGPuakf8+Me\nc+Mec/OrFr+cFxsbi0GDBiE5ORkGgwGLFi3Cxo0bERAQgMTERCxevBjz588HAIwfPx69evVq9DY3\nb96MoqIizJs3T24bPnw4YmJikJiYiISEBCQlJcFkMmHgwIGtdmq0NXIDtI/8MDfuMTfuMTf1Y37c\nY27cY25+ZZBa645GIiIionaMK5YTERERacAiioiIiEgDFlFEREREGrCIIiIiItKARRQRERGRBiyi\niIiIiDRgEUVERESkAYsoIiIiIg1YRBERERFpwCKKiIiISAMWUUREREQasIgiIiIi0oBFFBEREZEG\nLKKIiIiINGARRURERKQBiygiIiIiDVhEEREREWnAIoqIiIhIAxZRRERERBqwiCIiIiLSgEUUERER\nkQYsooiIiIg0YBFFREREpAGLKCIiIiINWEQRERERacAiioiIiEgDFlFEREREGrCIIiIiItKARRQR\nERGRBiyiiIiIiDRgEUVERESkAYsoIiIiIg1YRBERERFpwCKKiIiISAMWUUREREQasIgiIiIi0oBF\nFBEREZEGLKKIiIiINGARRURERKQBiygiIiIiDVhEEREREWnAIoqIiIhIAxZRRERERBqwiCIiIiLS\ngEUUERERkQYsooiIiIg0YBFFREREpAGLKCIiIiINWEQRERERacAiioiIiEgDFlFEREREGrCIIiIi\nItKARRQRERGRBiyiiIiIiDRgEUVERESkAYsoIiIiIg1YRBERERFpwCKKiIiISAMWUUREREQasIgi\nIiIi0oBFFBEREZEGLKKIiIiINGARRURERKQBiygiIiIiDVhEEREREWnAIoqIiIhIA8+W3uCPP/6o\n2D5gwAAcP37cpX39+vVC42/fvl2o/1dffSW0jSVLlgiNf/nyZdV909PTFdu7d++OzMxMl/ZXX31V\naC5nz54V6v/666/jo48+Ut3/3XffFRr/u+++E+pvMBgU2w8fPozBgwe7tM+ePVto/ODgYNV9582b\nh7/85S9C458/f16o/65du1T3nThxomL7yy+/jMcee8ylfe7cuUJzSU5OFup/6NAhPPfcc6r7z5w5\nU2j8q6++WnVf0f3m//7v/4TmcvLkSaH+P/30E1JTU1X3//LLL4XGf+GFF1T33bp1q2J7fHw89uzZ\n49L+xhtvCM3FarUK9f/3v/+NZcuWqe4fGRkpNP7ChQuF+nt5eSm2//TTT7j22mtd2v/73/8Kjf/p\np5+q7vv888+7/fx0p6qqSqh/UlKS6r7ujk9xcXFIS0tzad+7d6/QXLKyslT3feqpp4SOCQDw5ptv\nCvW/9dZbFdvbzJkoX1/fVtluWFhYq2xXhMlkapXthoaGtsp2RV111VUtvk3Rg3dr6dGjR6tst3Pn\nzq2yXRGtsd8AgL+/f6tsV0RAQECrbLc97DdA6+w73bp1a/FtatGhQ4cW32Zr7jeqzkQtW7YMhw4d\ngsFgwIIFCzBkyBA5tnfvXqxcuRJGoxEJCQmYM2dOs022LfLx8YGnZ3UaKysrYbfb5ZinpycmT56s\n29yUlZXJ30T9/f2dvtVZLBZd56akpAQWiwUAEBgYCG9vbzlmNptRWlqKpKQkXeYGAN566y2kp6fD\nYDDgvvvuQ3R0tBz7+eefsWTJEt3uO0eOHEFRURGA6g/zkJAQOZaXl6fr91VaWhry8/NhMBhw3XXX\noWPHjnLs4sWLus7Nli1bkJWVBYPBgPHjx6NLly5y7MyZM9ixYwc2btyoy9w0RoNnor7//nucP38e\nKSkpeOaZZ/DMM884xZcuXYpVq1Zh/fr12LNnD06fPt1sk21rjEYjjEYjysrKUFFR4XI2zdfXV7e5\nsVgssNvtCAkJQUBAAMrKypziZWVlus2N2WyGzWZDx44dERQUhJKSEqd4SUkJQkJCdJkbADh27Bgu\nXbqEZ555Bn/84x9dTru/+eabut138vPzUV5ejpEjR+Kaa67BkSNHnOKHDx/WbW4uX76M0tJS3HLL\nLRgxYoTLJaW0tDTd5ubs2bMoKCjArFmzMHHiRHzxxRdO8c2bNyM5OVmXuWmsBouo1NRUjBkzBgDQ\np08fFBcXyx+IWVlZCAoKQlRUFDw8PDBq1Ciha/3tnZeXl3ymxeFwON174eHhAUmSdJsbq9Uqn13x\n9PSEJElwOBwAALvdDoPBoNu8LpUcAAAgAElEQVTcWCwW+Pj4AKjehxwOh5wbm80Gg8EAo9Goy9wA\n1YVAXFwcAKBr164oLy9HRUUFgOoPSn9/f93uO/n5+fKl5ICAAFitVvkYVF5eDm9vb93m5uLFi/Il\nr6CgIFgsFvlsb2lpqa5zk5GRgQEDBgAAwsPDUVVVJd8vVVhYCF9fXwQFBekyN43VYBGVn5/vdLo4\nNDQUeXl5AKpPHde+b6Z2TA8MBoP84QcAkiTBw8NDMaa33DgcDjkXgHM+6sb0lhu73e709/fw8GBu\narly5QoCAwPl14GBgbhy5YpiTG/5MZvNTpd+vb29YTabFWN6y01lZaX85QSovtWiplCoG9NbbsrK\nyuDn5ye/9vPzk0+GlJWVOd3HpLfcNJbwr/MkSWrUBgcMGOD2JvLY2FhVbU3tkUce0dT3qaeewqhR\no+QzdVOnTsWyZcvQq1cv/Pjjj3j99deF5tG9e3e3N5H37dvXpW3lypVC42sh8gu32n2bOjdA9RkK\ndzd0Nna/1OLtt9/W9P+pyc3Ro0eFxnz55Zfd3kT+ySefaJpnbVoOqq+88oqmbYWFhaFnz57yr238\n/PzQv39/9OrVy+meQ7Xa2n4DAImJiZr6Ku07f/7zn+V95/HHHxeaR3x8vNubyMeNG6eqran961//\n0vT/1c3N0aNH8dBDDzXqmPPTTz+53XdEf3moROTXcAAwYcIETds5cuQIbrjhBjk3n3zyCcaPHy/n\n5ty5c8JjxsXFub2J/MYbb1TV1pSas/D7/PPP3cYaLKIiIiKQn58vv87NzUV4eLhi7PLly4iIiKh3\nPKVlDIDqYknp55vNvcTBwYMHhd60tZc48PHxwVtvvSWfMg4ICMD1118PoPrsQu3KX01ulJYxAKoL\nKKXlD5p7iYNNmzZh7dq1qvvXXuKgvLwcmzdvlgvmgoICTJ8+HR4eHrDb7U73AanJDQDFn6MD1R+E\nSj9jb84lDp577jnMmDFDaPyaJQ5KS0uxdetWLF26FED1e2rGjBnw8PCAzWbDlStX5Bti1eZGaRkD\noPpgqbT8QXMvcZCXl4dHH31Udf/aSxw4HA4cPHhQPs5kZ2fj8uXLKCkpQUFBgXxWClCXH9H9prmX\nOEhPTxc6TtVe4uDEiRM4ceIEtm3bJr9+5ZVX4OnpiYqKCvmsFKAuN0rLGADVxZLS8gfNvcTBpk2b\nhL7U1v6V7IkTJ3D+/Hns27cPAHDq1Cm89dZb8PLyQllZGQ4ePCj3Vfu+UlrGAKj+eyktf9CcSxy8\n//77Qv2BX5c4yM3NxdatW1FQUACg+rNg9+7d+P7771FUVIQTJ04gISEBgPrcKC1jAFQXS0rLHzTn\nEgevvvqqfLxQS3SJA3cavJwXHx8vv2GPHj2KiIgI+Se6Xbt2RVlZGbKzs2Gz2bBz507Ex8c3ycTa\ng9pvJKPR6PSttuYeKb3mpvZlBqvVCg8PD/kyVU2u9Jobk8kkH9zq5qbm/jGbzabL3ADVa0DVfBBm\nZGQgJCRELsYjIiJQWVmp230nIiICOTk5AKovbdb+dbCfnx9sNptucxMVFSV/USkoKICvr698fPb3\n94fVatVtbqKjo+Wz2zk5OQgICJCveoSEhMBsNqOoqEiXuWmsBs9ExcbGYtCgQUhOTobBYMCiRYuw\nceNGBAQEIDExEYsXL8b8+fMBQD49qBd2ux12u10uKisqKuDt7Q1JkmC1WlFRUaHb3Hh5ecHT01P+\nKXZAQACqqqpgMBhgMpng7++v29x4e3vDy8tLPosbFBSEiooKeHh4wMfHR74HaPr06brLDQDExMSg\nd+/eWLhwIQwGA2bOnIldu3bBz88Pw4YNwwMPPKDbfSc0NBTBwcHYvXs3DAYDBg8ejMzMTHh5eSEq\nKgpDhgzRbW4iIiIQFhYmn0EbNmwYzpw5Ay8vL3Tv3h3Dhw/XbW66d++Ozp07Y926dTAYDLj11lvx\n008/wWQyYeDAgbjtttvw0UcfYefOnbrLTWOpuifqiSeecHrdv39/+c9xcXFISUlp2lm1I3VXhK25\ntAdUF1l6zk3dRQVrvjED1YWEnnNT++ZowHllZJPJBJPJpOv8TJ8+3el1z5495T8PHDgQU6dObeEZ\ntR0DBw50eh0UFCT/OSwsTPiS229J3Xtoa//wqVOnTli1alVLT6nNGDt2rNPr2pdCe/bsiVmzZgnf\no0Wt8NgXd+tPxMbGKsb++Mc/Co2/YsUK4TkZjUbVfZtz9XB3j5R55513FGP9+vUTGv/pp5/WNC+1\n/va3vzXr+LNmzRKKrVmzRmj8l156Saj/li1bhPqL3iwu4o477hCKffDBB0Lj1/7ipJbIysWiN7+L\nPOLh//2//ycUGzVqlNBc6q6BpobI/WJ1C8qmtHnzZsX2cePGKcY+/PBDofF/+ukn4TnZbDbVfXv3\n7i08voiae1zVxkRXFXd3v547te/rUkP0MWUiRdTo0aMV2yVJUoyJ3qP65z//Wai/6I8eRB815e4R\nbm3msS9ERERE7QmLKCIiIiINWEQRERERacAiioiIiEgDFlFEREREGrCIIiIiItKARRQRERGRBiyi\niIiIiDRgEUVERESkAYsoIiIiIg1YRBERERFp0OLPzvP19RWK/fzzz0Lj7969W3hO77//vuq+48eP\nFx5frboPM24o9tFHHwmNL/qcpgkTJuA///mP6v6iz2MTFRUVJRRz91wwd0T+rvPmzcOXX34pNH5m\nZqZQ//DwcNV9V69erdh+7733KsZEH8Sq5Rlo+fn5qvueOXNGeHy1OnfuLBSbN2+e0PjPP/+88JxE\nHqAs8gxCUVarVSj2448/Co2fnZ0t1P/aa68Veq7gnXfeKTT+tGnThPrX93miFLv55puFxt+6datQ\n//r+vZRcuHBBqL+IRx55RCj2yiuvCI3/+9//XnXfr7/+GsePHxca/+233xbq7w7PRBERERFpwCKK\niIiISAMWUUREREQasIgiIiIi0oBFFBEREZEGLKKIiIiINGARRURERKQBiygiIiIiDVQttrl8+XIc\nOHAANpsNs2fPxtixY+XYTTfdhMjISBiNRgDAihUr0KlTp+aZbRt0+vRpFBcXQ5Ik9OjRw2mBxNTU\nVEybNk23uXn99ddx9OhR2O12TJkyBfHx8XLsvvvuQ7du3XSbm/fffx8nTpyAw+HA7bffjmHDhsmx\nRx99FGFhYQgKCgKgv9wAQHFxMcxmMwAgICDAaSHeS5cu6fp9lZqaikuXLsHhcODaa69F79695dh/\n//tfpKWl6TY3DodD/rPBYIDBYHCK6Xm/efXVV/Hzzz/Dbrdj+vTpGDVqlBybMmUKIiIi4OPjA0B/\nuWmMBouoffv2IT09HSkpKSgqKsKkSZOciigAWLduXbOuqttWFRUVoby8HEOHDoXVakVaWprLKtN6\nzc2hQ4dw/vx5rFy5EiUlJZg7d65TEQXoNzdHjx5FVlYWnn76aZSWlmLBggVORRQA/OUvf3HJl16Y\nzWZYrVZERETAbrcjLy/P5WkGet13Lly4gMLCQkyaNAlVVVXYsGGDUxEF6Dc3kiQBADw8PCBJEiRJ\nciqiAP3m5scff0RGRgZeffVVFBcXY+bMmU5FFFB9sqRXr16tNMP2q8EiKi4uDkOGDAEABAYGorKy\nEna7Xa7m9Sw4OBiBgYEAAE9PT9jtdsU3rh5dddVViImJAVD92IqqqiruN78YMGAA+vTpA6A6N2az\nGQ6HAx4evLoOAN7e3ggNDQVQ/YHocDj4vvpFVFQUIiIiAFTnyWq1ct+ppe4+wv2m2tVXX40BAwYA\nAPz9/Xk8bkIGqaZ8VyElJQU//PADXnjhBbntpptuQmxsLC5cuIChQ4di/vz59e60hYWF8gHyt6Qp\ncpOfn4+OHTu2xHRbVFPkBgBOnTqFfv36Nfd0W5S73KSnp+OGG25QnRuLxQJvb+/mnm6LU8rPsGHD\nkJCQoHrfqaiogJ+fX0tMt0U1xfvqyJEjuOqqq1piui2qqY45lZWV9T7vtT1yl5trr70WOTk5qnNz\n9OhRDBo0qLmn2yYsW7YMCxYsUIypLqJ27NiBtWvX4o033kBAQIDc/sknn2DkyJEICgrCnDlzMGnS\nJIwbN87tOK+++qpi+0MPPaQY69+/v5rpyUQfrLpx40Y88MADqvsrPSi1srISZWVlCAsLc/pGWFFR\ngc2bN6vOzUsvvaTYPm/ePMWY6INSN27cKNT/jjvuwN133626f8319NoKCgqQlZWFq666Cp6ev574\nvHz5Mt566y3VuQGA6OhoxfbTp08rxt555x3VcweAzz77THXfZ599FuvXrxcaf9asWU6vfXx84O/v\nj4KCAtR+G/r6+sJsNqOgoEB1bs6fP6/Y3qNHD8VYjx49hOYu8pBuoPpBryIPdFbad06ePInvvvsO\n06dPd4ofOnQIf/3rX1XvO6mpqYrtI0aMUIzV/XdqyIYNG4T6x8TEyGdp1Th58qRLW1Mdj919ULo7\ngzNnzhzV866Zj4js7GzccccdqvsrPVQ9Ozsbx44dw4033uj0xeLs2bP45z//KXTMcffA5djYWMXY\niRMnVM8dAKZPn666ryRJwgVdaWmp0+uvv/4ar732GtatW+e033z66ae44YYbEBYWpjo3JpNJsd1s\nNivGHnroIaG5V1VVqe67Zs0a4WPa7Nmzhfq7K6JUnQPevXs31qxZ45J4AJg4cSLCwsLg6emJhIQE\nnDp1Smhi7V1VVZViAQUAfn5+us5NUVERMjMzMWjQIKcCCgA6deqk69yYTCbFAgqoLsodDoducwNU\nf1n57rvvMG3aNJcC6+qrr9b1vsPjsXsXL17EsWPHMGrUKJczs7169dJ1br777jusXbsWa9ascdlv\nJkyYoOvcNEaDRVRpaSmWL1+OtWvXIjg42CU2c+ZMWCwWAEBaWhr69u3bPDNtgxwOB0pKShAaGupS\nQDkcDhQUFOg2NzabDRkZGRg0aBC8vLxcYocPH9ZtbgwGAwIDA1FYWOhSQBkMBqfL3XrLDVD9xWTH\njh1ITk52+eZdVVWF9957T7f7Do/H7lksFhw8eBAJCQkuZ0IsFgt27dql29yUlpbixRdfxOrVqxX3\nmwcffFC3uWmsBm8s37x5M4qKipwuHQ0fPhwxMTFITExEQkICkpKSYDKZMHDgwAZPAf6W1JwxKCoq\nkttMJhM8PT3h6+sLk8mk29zk5eXBZrM5nd4OCgpChw4d0LFjR4SGhuo2N76+vvDw8EBISIjcZjab\nYbPZUFVVBbPZjI4dOyI5OVl3uQGAY8eOoaKiAh9//LHc1rNnT0RERKB///6Ijo7W7b7D47F7mZmZ\nMJvN2LNnj9zWqVMnBAcHo2vXroiKitJtbrZs2YKioiLMnz9fbhs2bBj69euHMWPGICEhQT7rq7fc\nNFaDRVRSUhKSkpLcxmfMmIEZM2Y06aTaiw4dOtT7c1l/f39s2rSpBWfUdkRFRSEqKsptvEuXLkL3\nzPyWVFRUoKKiwm28vLwc5eXl+OCDD1pwVm1HbGwsYmNj3caHDx8ufO/jbwWPx+5FR0e7vW8SqL4X\n7R//+EcLzqjtmDJlCqZMmeI2fs899+Cee+5xue2CGsbfxRIRERFpwCKKiIiISAMWUUREREQasIgi\nIiIi0oBFFBEREZEGLKKIiIiINGjx3zPWt/S7Umzv3r1C44s8MqBGzQM91RB9/IUIpcc71BcrKysT\nGj8jI0N4TnPnzlXd9/rrrxcaW3SJg5SUFKGY6CMqRB7BAFSvSyMiLCxMqL8Idz9737dvn2Js3759\nQuN/9NFHQv2nTZuGBx98UHX/06dPC40v4osvvlBsHzFihGKsvvehkrS0NKH+MTExuOWWW1T3/9Of\n/iQ0/sqVK1X3fe2114RiX375pdBcaq+Fptbo0aNV9x0yZIjw+CKys7MV22NjYxVjN954o9D4IsdX\nAMLPgFyzZo1Q/0ceeUR13/qWGVGKXXPNNUJz2b9/v1B/d4++cufs2bNC/d3hmSgiIiIiDVhEERER\nEWnAIoqIiIhIAxZRRERERBqwiCIiIiLSgEUUERERkQYsooiIiIg0YBFFREREpAGLKCIiIiINWEQR\nERERacAiioiIiEgDgyRJUmtPgoiIiKi94ZkoIiIiIg1YRBERERFpwCKKiIiISAMWUUREREQasIgi\nIiIi0oBFFBEREZEGnq2x0WXLluHQoUMwGAxYsGABhgwZIsf27t2LlStXwmg0IiEhAXPmzGmSbS5f\nvhwHDhyAzWbD7NmzMXbsWDl20003ITIyEkajEQCwYsUKdOrUqUm2K6o1cgO0j/wwN+4xN+4xN/Vj\nftxjbtxjbn4htbD9+/dLs2bNkiRJkk6fPi1NmTLFKX7LLbdIOTk5kt1ul6ZOnSqlp6c3epupqanS\nAw88IEmSJBUWFkqjRo1yio8ePVoqKytr9HYaqzVyI0ntIz/MjXvMjXvMTf2YH/eYG/eYm1+1+Jmo\n1NRUjBkzBgDQp08fFBcXo6ysDP7+/sjKykJQUBCioqIAAKNGjUJqaiqio6Mbtc24uDi5Sg4MDERl\nZSXsdrtcrbYVrZEboH3kh7lxj7lxj7mpH/PjHnPjHnPzqxa/Jyo/Px8hISHy69DQUOTl5QEA8vLy\nEBoaqhhrDKPRCD8/PwDAhg0bkJCQ4JL0RYsWYerUqVixYgWkVlrEvTVyA7SP/DA37jE37jE39WN+\n3GNu3GNuftUq90TV1pI7wI4dO7Bhwwa88cYbTu2PPvooRo4ciaCgIMyZMwfbtm3DuHHjWmxe7rT0\nm6M95Ye5cY+5cY+5qR/z4x5z456ec9PiZ6IiIiKQn58vv87NzUV4eLhi7PLly4iIiGiS7e7evRtr\n1qzBunXrEBAQ4BSbOHEiwsLC4OnpiYSEBJw6dapJtimqtXIDtP38MDfuMTfuMTf1Y37cY27cY25+\n1eJFVHx8PLZt2wYAOHr0KCIiIuDv7w8A6Nq1K8rKypCdnQ2bzYadO3ciPj6+0dssLS3F8uXLsXbt\nWgQHB7vEZs6cCYvFAgBIS0tD3759G71NLVojN0D7yA9z4x5z4x5zUz/mxz3mxj3m5lctfjkvNjYW\ngwYNQnJyMgwGAxYtWoSNGzciICAAiYmJWLx4MebPnw8AGD9+PHr16tXobW7evBlFRUWYN2+e3DZ8\n+HDExMQgMTERCQkJSEpKgslkwsCBA1vt1Ghr5AZoH/lhbtxjbtxjburH/LjH3LjH3PzKILXWHY1E\nRERE7RhXLCciIiLSgEUUERERkQYsooiIiIg0YBFFREREpAGLKCIiIiINWEQRERERacAiioiIiEgD\nFlFEREREGrCIIiIiItKARRQRERGRBiyiiIiIiDRgEUVERESkAYsoIiIiIg1YRBERERFpwCKKiIiI\nSAMWUUREREQasIgiIiIi0oBFFBEREZEGLKKIiIiINGARRURERKQBiygiIiIiDVhEEREREWnAIoqI\niIhIAxZRRERERBqwiCIiIiLSgEUUERERkQYsooiIiIg0YBFFREREpAGLKCIiIiINWEQRERERacAi\nioiIiEgDFlFEREREGrCIIiIiItKARRQRERGRBiyiiIiIiDRgEUVERESkAYsoIiIiIg1YRBERERFp\nwCKKiIiISAMWUUREREQasIgiIiIi0oBFFBEREZEGLKKIiIiINGARRURERKQBiygiIiIiDVhEERER\nEWnAIoqIiIhIAxZRRERERBqwiCIiIiLSgEUUERERkQYsooiIiIg0YBFFREREpAGLKCIiIiINWEQR\nERERacAiioiIiEgDFlFEREREGrCIIiIiItKARRQRERGRBiyiiIiIiDRgEUVERESkAYsoIiIiIg1Y\nRBERERFpwCKKiIiISAMWUUREREQasIgiIiIi0oBFFBEREZEGLKKIiIiINPBs6Q2+8MILiu333Xcf\n3nrrLZf2Bx98UGj8ffv2CfUfOXIkDhw4oLp/RkaG0Pj33Xef6r6RkZGK7bt27cKNN97o0r548WKh\nuaSmpgr1f/bZZ/Hss8+q7v/tt98KjX/o0CGh/lOnTlVsX758Of785z+7tJeWlgqNL7KvjR49Grfc\ncovQ+Hv37hXqL0mSUH8RGzduFOq/du1a4f4PPfSQ6v4LFiwQGn/kyJGq+z788MOK7QsXLsTSpUtd\n2kX/nTp16iTUf/369diwYYPq/sHBwULjT5kyRXXfAQMGKLb/73//w+233+7SPnHiRKG5FBUVCfV/\n+eWXkZmZqbr/Aw88IDT+N998I9Tf3T781FNPYcmSJS7tFRUVQuOfO3dOdd8333wT06dPFxq/srJS\nqP/BgwdV9x06dKhie0pKCpKSklzaExIShOZiNptV9124cCESExOFxj969KhQf3fazJmo8PDwVtlu\n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\nnNMMCbts/vrXvxplk5eX15zTDImmPOcUFhY21zRDor5sxo0bZ5RNfn5+c02z1Rk/frxtW1APlm/b\ntk1r167VM888o/j4+Fpt06dP9//b4/Ho4MGDmjJliu1Y1Q/TXioyMlJer7fO9r/85S/BTNGvtLTU\nqP/ChQu1dOnSUcD2iAAACMpJREFUoPtXX5Wrdvz4cX366ae67rrrAr4csjqfYLK57777Am5/5ZVX\nNGPGjDrbLcPfFh588EGj/kOHDtW0adOC7j9gwIBan/Pz83Xw4EENHz5c//d//1env0k2Tlz6HE1D\nvve97wXd96mnnlJeXp7R+BkZGf5/nzp1Sl999ZWuueYa3X///XX6RkdHKzIyMuhsZs6cGXD77t27\nNXz48Drbx40bZzT3rKwso/6WZWnixIlB9x81alStzydOnNC+ffvk8Xj0yCOP1Gq74oor1KlTJ0nB\nHTu7d+8OuH3cuHF6//33A243sXXrVqP+EydO1Lvvvht0/0tfiPzRRx9p7dq1WrdunWJjY2udU3/4\nwx/6r0wFk82f//zngNszMjL0u9/9rs7273znO0HPW5J++9vfGvXft2+f7YttAzl16lStz+fPn1dx\ncbE6d+6sm266qU5/03POG2+8EXD7nDlz9OKLL9bZvmPHjmCnLqn2OaEhXbp00axZs4zGz8/P9/+7\noWzcbrfROee5554LuP2+++4LeL4IdJ6rz4IFC4Luu3btWtufn3b+9a9/GfW30+DtvLNnzyozM1Pr\n1q1TUlJSnbb58+ervLxcUtXJql+/fk0ysbagvLxcOTk5Gj9+vP/2Q822rVu3hm02FRUVOnDggK69\n9lpFR0fXadu1a1fYZuP1evWf//xHQ4cOrfNAudfr1aeffqrKykpJ4ZeNVHV8fPbZZxozZkzAY+fD\nDz8M22Pn7NmzysrK0po1awKej++4446wzaayslJFRUXq3LlznVuclZWVys/PJ5t6sqn+pTzcsmms\nBq9Ebd68WYWFhVq8eLF/28iRIzVgwABNmjRJHo9H6enpiomJ0aBBg5r8akJr9vXXX6usrEzbtm3z\nb+vatauSkpLUq1cvde/ePWyz+eabb1ReXq5PPvnEv61Tp06Kj49X165dlZKSErbZnDx5UhUVFdq/\nf79/W1JSkuLi4pSSkqJOnTopJydHM2fODLtsJOno0aMqKyvTzp07/dtSU1OVmJio7t27q1u3bmF7\n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\nRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 720x720 with 32 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "LANt0v84d8Ed",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}